package instance_of;
/*
* instanceof运算符
*     格式：引用变量名 instanceof 类名和接口
*
* */

import interface01.A;

interface JD{
}
abstract class Animal{
}
class Dog extends Animal implements JD{
}
class Sheep extends Animal {
}

public class Demo {
    public static void main(String[] args) {
        // 1.普通类
        Dog dog = new Dog();
        boolean b = dog instanceof Dog;// instanceof运算符会去检测引用变量指向的对象能赋值为右边的类型
                                       // 如果可以赋值结果为true，否则为false
                                       // Dog d = new Dog() d是虚拟的方便理解
        System.out.println(b);     // true

        // 2.抽象类
        Animal a = new Dog();
        System.out.println(a instanceof Dog);// a引用指向的对象能否赋值给Dog类型
                                             // Dog d = new Dog(); 可以赋值
        System.out.println(a instanceof Animal);// a引用指向的对象能否赋值给Animal类型
                                               // Animal temp = new Dog(); 可以赋值  temp虚拟的

        // 3.接口
        JD j = new Dog();
        System.out.println(j instanceof Dog); // j引用指向的对象能否赋值给Dog类型
                                              // Dog d = new Dog(); 可以赋值
        System.out.println(j instanceof JD); // j引用指向的对象能否赋值给Dog类型
                                             // JD temp = new Dog(); 可以赋值
        // 4.其他类
        Animal a2 = new Sheep();
        System.out.println(a2 instanceof Dog); // a2引用指向的对象能否赋值给Dog类型
                                                // Dog d = new Sheep(); 不能 结果为false
    }
}
